package com.atguigu.chapter13

import util.control.Breaks._

object AbstractControl {
  def main(args: Array[String]): Unit = {
    //myRunInThread 就是一个抽象控制
    //是没有输入,也没有输出的函数 f1: () => Unit
    myRunInThread {
      () =>
        println("干活咯！5秒完成...")
        Thread.sleep(5000)
        println("干完咯！")
    }

    //对于没有输入，也没有返回值函数，可以简写成如下形式
    myRunInThread2 {
      println("干活咯！5秒完成...~~~")
      Thread.sleep(5000)
      println("干完咯！~~~")
    }

    myRunInThread(() => {
      println("干活咯！5秒完成...")
      Thread.sleep(5000)
      println("干完咯！")
    }
    )

    println("#########")
    val x = 10
    //myRunInThread33(x + 10)
    myRunInThread33 {
      print("hello myRunInThread33")
      x + 10
    }

    var count = 0
    breakable {
      while (count < 10) {
        count += 1
        println("我是" + count)
        if (count == 8) {
          println("我停止了")
          break()
        }
      }
    }

  }

  //简写形式,既然没有入参就直接去掉括号,调用的时候也不要括号
  def myRunInThread2(f1: => Unit): Unit = {
    new Thread {
      override def run(): Unit = {
        f1 //只写了 f1
      }
    }.start()
  }

  def myRunInThread(f1: () => Unit): Unit = {
    new Thread {
      override def run(): Unit = {
        f1() //只写了 f1
      }
    }.start()
  }

  // 代码块不能用括号调用,函数有括号就用括号调用,没有括号就不用括号
  def myRunInThread33(f1: => Int): Unit = {
    new Thread {
      override def run(): Unit = {
        f1 //只写了 f1
      }
    }.start()
  }
}
